package br.edu.unifei.mestrado.greedy;

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import br.edu.unifei.mestrado.commons.graph.GraphWrapper;
import br.edu.unifei.mestrado.db.graph.GraphDB;

public class MainGreedyKWayNeo4J {
	
	private static Logger logger = LoggerFactory.getLogger(MainGreedyKWayNeo4J.class);

	public static void main(String[] args) {
		logger.warn("Iniciando Greedy K-Way com Neo4J...");

		String reuseDBStr = null;
		String file = null;
		boolean reuseDB = false;
		Integer sets = null;
		List<Integer> rawSeeds = new ArrayList<Integer>();

		// executar assim: main false fileName.txt
		// ou: main true
		// ou sem nada, daí entra tudo via teclado
		if (args.length > 0) {
			reuseDBStr = args[0];
			reuseDB = Boolean.parseBoolean(reuseDBStr);
			if (args.length > 1) {
				file = args[1];
				if (args.length > 2) {
					try {
						sets = Integer.parseInt(args[2]);
					} catch (NumberFormatException e) {
						logger.warn("Valor de K inválido.");
					}
					if (args.length < sets + 3) {
						throw new RuntimeException("Os valores de seed são obrigatórios quando se usa o k.");
					}
					for (int i = 3; i < args.length; i++) {
						try {
							rawSeeds.add(Integer.parseInt(args[i]));
						} catch (NumberFormatException e) {
							logger.warn("Valor de K inválido.");
							break;
						}
					}
				}
			} else {
				logger.warn("Quando não reutilizar o banco, o arquivo eh obrigatorio");
				System.exit(2);
			}
		} else {
			logger.warn("Uso: MainGreedyKWayNeo4J reuseDB file nSets set1 set2 ... setN");
			System.exit(2);
		}
		logger.warn("Iniciando GreedyKWay com Neo4J... file: " + file);
		GraphWrapper grafo = new GraphDB(reuseDB, file, GraphWrapper.NO_LEVEL);

		GreedyNeoDB gkw = new GreedyNeoDB(grafo);
		gkw.execute(sets, rawSeeds);
	}
}
